#!/bin/bash

print_logo() {
echo -e "
\033[0;1;31;91m▄\033[0;1;33;93m▄\033[0m    \033[0;1;36;96m▄\033[0;1;34;94m▄\033[0m    \033[0;1;31;91m▄\033[0;1;33;93m▄▄\033[0;1;32;92m▄\033[0m    \033[0;1;34;94m▄\033[0;1;35;95m▄\033[0m    \033[0;1;33;93m▄\033[0;1;32;92m▄\033[0m    \033[0;1;34;94m▄\033[0;1;35;95m▄▄\033[0;1;31;91m▄\033[0m   
\033[0;1;33;93m█\033[0;1;32;92m█\033[0m    \033[0;1;34;94m█\033[0;1;35;95m█\033[0m   \033[0;1;33;93m██\033[0;1;32;92m▀▀\033[0;1;36;96m██\033[0m   \033[0;1;35;95m█\033[0;1;31;91m█\033[0m    \033[0;1;32;92m█\033[0;1;36;96m█\033[0m   \033[0;1;35;95m██\033[0;1;31;91m▀▀\033[0;1;33;93m██\033[0m  
\033[0;1;32;92m█\033[0;1;36;96m█\033[0m    \033[0;1;35;95m█\033[0;1;31;91m█\033[0m  \033[0;1;33;93m█\033[0;1;32;92m█\033[0m    \033[0;1;34;94m█\033[0;1;35;95m█\033[0m  \033[0;1;31;91m█\033[0;1;33;93m█\033[0m    \033[0;1;36;96m█\033[0;1;34;94m█\033[0m  \033[0;1;35;95m█\033[0;1;31;91m█\033[0m    \033[0;1;32;92m█\033[0;1;36;96m█\033[0m 
\033[0;1;36;96m█\033[0;1;34;94m██\033[0;1;35;95m██\033[0;1;31;91m██\033[0;1;33;93m█\033[0m  \033[0;1;32;92m█\033[0;1;36;96m█\033[0m    \033[0;1;35;95m█\033[0;1;31;91m█\033[0m  \033[0;1;33;93m█\033[0;1;32;92m██\033[0;1;36;96m██\033[0;1;34;94m██\033[0;1;35;95m█\033[0m  \033[0;1;31;91m█\033[0;1;33;93m█\033[0m    \033[0;1;36;96m█\033[0;1;34;94m█\033[0m 
\033[0;1;34;94m█\033[0;1;35;95m█\033[0m    \033[0;1;33;93m█\033[0;1;32;92m█\033[0m  \033[0;1;36;96m█\033[0;1;34;94m█\033[0m    \033[0;1;31;91m█\033[0;1;33;93m█\033[0m  \033[0;1;32;92m█\033[0;1;36;96m█\033[0m    \033[0;1;35;95m█\033[0;1;31;91m█\033[0m  \033[0;1;33;93m█\033[0;1;32;92m█\033[0m    \033[0;1;34;94m█\033[0;1;35;95m█\033[0m 
\033[0;1;35;95m█\033[0;1;31;91m█\033[0m    \033[0;1;32;92m█\033[0;1;36;96m█\033[0m   \033[0;1;35;95m██\033[0;1;31;91m▄▄\033[0;1;33;93m██\033[0m   \033[0;1;36;96m█\033[0;1;34;94m█\033[0m    \033[0;1;31;91m█\033[0;1;33;93m█\033[0m   \033[0;1;36;96m██\033[0;1;34;94m▄▄\033[0;1;35;95m██\033[0m  
\033[0;1;31;91m▀\033[0;1;33;93m▀\033[0m    \033[0;1;36;96m▀\033[0;1;34;94m▀\033[0m    \033[0;1;31;91m▀\033[0;1;33;93m▀▀\033[0;1;32;92m▀\033[0m    \033[0;1;34;94m▀\033[0;1;35;95m▀\033[0m    \033[0;1;33;93m▀\033[0;1;32;92m▀\033[0m    \033[0;1;34;94m▀\033[0;1;35;95m▀▀\033[0;1;31;91m▀\033[0m
"
echo -e "
\033[0;1;31;91m▄\033[0;1;33;93m▄▄\033[0;1;32;92m▄▄\033[0m     \033[0;1;35;95m▄\033[0;1;31;91m▄▄\033[0;1;33;93m▄▄\033[0m       \033[0;1;35;95m▄\033[0;1;31;91m▄▄\033[0;1;33;93m▄\033[0m      \033[0;1;34;94m▄\033[0;1;35;95m▄▄\033[0;1;31;91m▄\033[0m               \033[0;1;32;92m▄▄\033[0;1;36;96m▄▄\033[0;1;34;94m▄\033[0m                \033[0;1;31;91m▄\033[0;1;33;93m▄▄\033[0;1;32;92m▄\033[0m   
\033[0;1;33;93m█\033[0;1;32;92m█▀\033[0;1;36;96m▀▀\033[0;1;34;94m██\033[0m   \033[0;1;31;91m█\033[0;1;33;93m█▀\033[0;1;32;92m▀▀\033[0;1;36;96m██\033[0m    \033[0;1;31;91m██\033[0;1;33;93m▀▀\033[0;1;32;92m██\033[0m   \033[0;1;34;94m▄\033[0;1;35;95m█▀\033[0;1;31;91m▀▀\033[0;1;33;93m▀█\033[0m             \033[0;1;32;92m█\033[0;1;36;96m▀▀\033[0;1;34;94m▀▀\033[0;1;35;95m██\033[0;1;31;91m▄\033[0m             \033[0;1;33;93m██\033[0;1;32;92m▀▀\033[0;1;36;96m██\033[0m  
\033[0;1;32;92m█\033[0;1;36;96m█\033[0m    \033[0;1;35;95m█\033[0;1;31;91m█\033[0m  \033[0;1;33;93m█\033[0;1;32;92m█\033[0m    \033[0;1;34;94m█\033[0;1;35;95m█\033[0m  \033[0;1;31;91m█\033[0;1;33;93m█\033[0m    \033[0;1;36;96m█\033[0;1;34;94m█\033[0m  \033[0;1;35;95m█\033[0;1;31;91m█▄\033[0m                       \033[0;1;31;91m█\033[0;1;33;93m█\033[0m            \033[0;1;33;93m█\033[0;1;32;92m█\033[0m    \033[0;1;34;94m█\033[0;1;35;95m█\033[0m 
\033[0;1;36;96m█\033[0;1;34;94m█\033[0m    \033[0;1;31;91m█\033[0;1;33;93m█\033[0m  \033[0;1;32;92m█\033[0;1;36;96m█\033[0m    \033[0;1;35;95m█\033[0;1;31;91m█\033[0m  \033[0;1;33;93m█\033[0;1;32;92m█\033[0m    \033[0;1;34;94m█\033[0;1;35;95m█\033[0m    \033[0;1;33;93m▀█\033[0;1;32;92m██\033[0;1;36;96m█▄\033[0m                 \033[0;1;31;91m▄\033[0;1;33;93m█▀\033[0m             \033[0;1;32;92m█\033[0;1;36;96m█\033[0m \033[0;1;34;94m██\033[0m \033[0;1;35;95m█\033[0;1;31;91m█\033[0m 
\033[0;1;34;94m█\033[0;1;35;95m█\033[0m    \033[0;1;33;93m█\033[0;1;32;92m█\033[0m  \033[0;1;36;96m█\033[0;1;34;94m█\033[0m    \033[0;1;31;91m█\033[0;1;33;93m█\033[0m  \033[0;1;32;92m█\033[0;1;36;96m█\033[0m    \033[0;1;35;95m█\033[0;1;31;91m█\033[0m       \033[0;1;34;94m▀█\033[0;1;35;95m█\033[0m              \033[0;1;31;91m▄\033[0;1;33;93m█▀\033[0m               \033[0;1;36;96m█\033[0;1;34;94m█\033[0m    \033[0;1;31;91m█\033[0;1;33;93m█\033[0m 
\033[0;1;35;95m█\033[0;1;31;91m█▄\033[0;1;33;93m▄▄\033[0;1;32;92m██\033[0m   \033[0;1;34;94m█\033[0;1;35;95m█▄\033[0;1;31;91m▄▄\033[0;1;33;93m██\033[0m    \033[0;1;34;94m██\033[0;1;35;95m▄▄\033[0;1;31;91m██\033[0m   \033[0;1;32;92m█\033[0;1;36;96m▄▄\033[0;1;34;94m▄▄\033[0;1;35;95m▄█\033[0;1;31;91m▀\033[0m            \033[0;1;31;91m▄\033[0;1;33;93m██\033[0;1;32;92m▄▄\033[0;1;36;96m▄▄\033[0;1;34;94m▄\033[0m     \033[0;1;33;93m██\033[0m      \033[0;1;35;95m██\033[0;1;31;91m▄▄\033[0;1;33;93m██\033[0m  
\033[0m
"
}
# Function to show a loading animation
loading_animation() {
    local animation="|/-\\"
    local animation_duration=1
    local animation_interval=0.1
    local start_time=$(date +%s)

    while [ $(($(date +%s) - start_time)) -lt $animation_duration ]; do
        for ((i=0; i<${#animation}; i++)); do
            echo -ne "\r[*]文件扫描中... ${animation:$i:1}"
            sleep $animation_interval
        done
    done
    echo
}

# Function to scan .py files
scan_py_files() {
    files=(
        "ddos_cn/Flood_attack/index.sh|洪水攻击(Flood attack)"
        "ddos_cn/Server_attack/index.sh|服务器攻击(Server attack)"
        "ddos_cn/Slow_Attack/index.sh|缓慢攻击(Slow attack)"
        "ddos_cn/Protocol_specific_attack/index.sh|协议特定攻击(Protocol specific attack)"
        "ddos_cn/ipv6_attack/index.sh|IPv6 洪水攻击(IPv6 DDOS attack)"
        "ddos_cn/Other_attack/index.sh|其他攻击(Other attacks)"
    )
    
    for i in "${!files[@]}"; do
        IFS="|" read -r file_path description <<< "${files[$i]}"
        folder_path=$(dirname "$file_path")
        py_files=($(ls "$folder_path"/*.py 2>/dev/null | grep -v 'index.py'))
        count=${#py_files[@]}
        descriptions[$i]="${description} (${count})"
        paths[$i]="$file_path"
    done
}

# Function to display art
print_art() {
    echo -e "\033[1;34;40m[*]hoho ddos2"
    echo -e "\033[1;32;40m[*]你好，欢迎使用hoho_ddos2.0，这是一个网络黑客发起使用的DDOS攻击程序，具有多种DDOS攻击类型和方法。未来将会更新更多的DDOS方法。"
    echo -e "\033[1;37;40m
 --------------------------------------
|               项目开源               |
|https://github.com/sansjtw/hoho_ddos2 |
|https://gitee.com/sansjtw/hoho_ddos2  |
|                                      |
|               博客网站               |
|http://dvrs3.osxo.cn/bb               |
|http://dvrss.ouuq.cn/f4               |
|                                      |
 --------------------------------------
"
    echo -e "\033[1;31;40m[-]请勿用于非法目的。"
    echo -e "\033[1;37;40m"
}

# Function to run a Python file
run_python_file() {
    local file_path="${paths[$1]}"

    if [ -f "$file_path" ] && [[ "$file_path" == *.sh ]]; then
        echo "ok"
        chmod +777 "$file_path"
        bash "$file_path"
    else
        echo -e "\033[1;31;40m[-]错误: 文件不存在。"
        echo -e "\033[1;37;40m"
    fi
}

main_shuoming() {
 whiptail --title "hoho_ddos2.0 TUI" --msgbox "hoho ddos2\n你好，欢迎使用hoho_ddos2.0，这是一个网络黑客发起使用的DDOS攻击程序，具有多种DDOS攻击类型和方法。未来将会更新更多的DDOS方法。\n\n --------------------------------------\n|               项目开源               |\n|https://github.com/sansjtw/hoho_ddos2 |\n|https://gitee.com/sansjtw/hoho_ddos2  |\n|                                      |\n|               博客网站               |\n|http://dvrs3.osxo.cn/bb               |\n|http://dvrss.ouuq.cn/f4               |\n|                                      |\n --------------------------------------\n接下来，使用↑↓← → ⏎键或触摸屏进行操作。\n请勿用于非法目的。" 25 80
}

# Function to display the main menu
main_menu() {
    while true; do
        options=()
        for i in "${!descriptions[@]}"; do
            options+=($((i+1)) "${descriptions[$i]}")
        done
        options+=(7 "文字菜单")
        options+=(8 "关于")
        options+=(9 "English")
        options+=(0 "退出")

        choice=$(whiptail --title "hoho_ddos2.0 TUI" --menu "请选择攻击类型:" 20 78 10 "${options[@]}" 3>&1 1>&2 2>&3)
        
        if [ $? -ne 0 ]; then
            echo "[-]正在退出..."
            break
        elif [ "$choice" == "0" ]; then
            echo "[-]正在退出..."
            break
         elif [ "$choice" == "7" ]; then
            python3 main_cn.py
            break
        elif [ "$choice" == "8" ]; then
            main_shuoming
        elif [ "$choice" == "9" ]; then
             chmod +x main.sh
             bash main.sh
             break
        else
            run_python_file $((choice-1))
        fi
    done
}

# Main function
main() {
    print_logo
    loading_animation
    scan_py_files
    print_art
    main_shuoming
    main_menu
}

main